package com.library.common.util

/**
 * 作者：SimGa
 * 日期：2019/9/16
 * 时间：17:58
 */
import android.content.Context
import android.content.res.Resources
import android.util.DisplayMetrics
import android.view.WindowManager
import com.library.common.base.BaseApplication.Companion.instance
import com.library.common.ext.logE

/**
 * @Description dp和px转换
 * @Author 一花一世界
 */
object DensityUtil {
    val context: Context
        get() = instance

    /**
     * @Description 获取屏幕宽度
     */
    val screenWidth: Int
        get() {
            val displayMetric =
                Resources.getSystem().displayMetrics
            return displayMetric.widthPixels
        }

    /**
     * @Description 获取屏幕高度
     */
    val screenHeight: Int
        get() {
            val displayMetric =
                Resources.getSystem().displayMetrics
            return displayMetric.heightPixels
        }

    /**
     * @Description 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    fun dip2px(dpValue: Float): Int {
        val scale =
            context.resources
                .displayMetrics.density
        return (dpValue * scale + 0.5f).toInt()
    }

    /**
     * @Description 根据手机的分辨率将 sp 值转换为 px 值，保证文字大小不变
     */
    fun sp2px(spValue: Float): Int {
        val fontScale =
            context.resources
                .displayMetrics.scaledDensity
        return (spValue * fontScale + 0.5f).toInt()
    }

    /**
     * @Description 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    fun px2dip(pxValue: Float): Int {
        val scale =
            context.resources
                .displayMetrics.density
        return (pxValue / scale + 0.5f).toInt()
    }

    fun px2sp(pxValue: Float): Int {
        val scale =
            context.resources
                .displayMetrics.scaledDensity
        return (pxValue / scale + 0.5f).toInt()
    }//屏幕高度(dp)//屏幕宽度(dp)//屏幕密度dpi（120 / 160 / 240）
    //屏幕宽度算法:屏幕宽度（像素）/屏幕密度
//屏幕密度（0.75 / 1.0 / 1.5）// 屏幕高度（像素）// 屏幕宽度（像素）

    /**
     * @Description 获取Android设置屏幕相关信息
     */
    val screenProperty: Unit
        get() {
            val wm = context
                .getSystemService(Context.WINDOW_SERVICE) as WindowManager
            val dm = DisplayMetrics()
            wm.defaultDisplay.getMetrics(dm)
            val width = dm.widthPixels // 屏幕宽度（像素）
            val height = dm.heightPixels // 屏幕高度（像素）
            val density = dm.density //屏幕密度（0.75 / 1.0 / 1.5）
            val densityDpi = dm.densityDpi //屏幕密度dpi（120 / 160 / 240）
            //屏幕宽度算法:屏幕宽度（像素）/屏幕密度
            val screenWidth = (width / density).toInt() //屏幕宽度(dp)
            val screenHeight = (height / density).toInt() //屏幕高度(dp)
            (
                "JIA---" + "屏幕宽度:" + width + "   屏幕高度:" + height
                        + "   屏幕密度:" + density + "   屏幕密度dpi:" + densityDpi
                        + "   屏幕宽度:" + screenWidth + "    屏幕高度:" + screenHeight
            ).logE("Logger")
        }
}